# -*- coding: utf-8 -*-
# itertools 提供了用于操作迭代对象的函数

import itertools

#### 无限迭代器
# natuals = itertools.count(1)
# for n in natuals:
# 	print(n)

#### cycle() 将传入的一个序列无限重复下去
# cs = itertools.cycle('ABC')
# for c in cs:
# 	print(c)

#### repeat() 负责把一个元素无限重复下去，不过如果提供第二个参数就可以限定重复次数
ns = itertools.repeat('A',3)
for n in ns:
	print(n)

#### 通过takewhile()函数根据条件判断截取一个有限的序列
natuals = itertools.count(1)
ns = itertools.takewhile(lambda x: x<=10,natuals)
print(list(ns))

#### chain() 把一组迭代对象串联起来，形成一个更大的迭代器
for c in itertools.chain('ABC','XYZ'):
	print(c)

#### groupby() 把迭代器中相邻的重复元素跳出来放在一起：
for key,group in itertools.groupby('AAABBBCCCAAA'):
	print(key,list(group))

for key,group in itertools.groupby('AaaBBbCcAaa',lambda c:c.upper()):
	print(key,list(group))